package com.cwt_taxi_xa.protocol;

import com.cwt_taxi_xa.util.AppLog;
import com.cwt_taxi_xa.util.DateUtil;
import com.cwt_taxi_xa.util.ExceptionUtil;
import com.cwt_taxi_xa.util.StringUtil;
import com.cwt_taxi_xa.util.Tools;

import java.util.Calendar;
import java.util.Date;


/**
 * 运营ID生成器
 * @author wlh
 *
 */
public class BusinessFactory {

	private static String PREF_INTO_FULL_TIME = "INTO_FULL_TIME";

	/**
	 * 2.5	单次营运结束后营运数据发送指令 （必选）--待定
	 */
	public static byte[] meterSingleBusinessData = null;

	/**
	 * 空转重时位置基本信息
	 */
	public static byte[] aboardLocationData = null;
	/**
	 * 重转空时位置基本信息
	 */
	public static byte[] goOffLocationData = null;

	/**
	 * 获取运营ID
	 * @param time	yyyyMMddHHmmss
	 * @return
	 */
	public static byte[] getBusinessId(String time){
		return getId(time);
	}

	/**
	 * 获取评价ID
	 * @param time	yyyyMMddHHmmss
	 * @return
	 */
	public static byte[] getEvaluateId(String time){
		return getId(time);
	}

	/**
	 * 获取照片、录音文件ID
	 * @param time	yyyyMMddHHmmss
	 * @return
	 */
	public static long getMediaIdForInt(String time){
		byte[] id = getMediaId(time);
		return Long.parseLong(Tools.parseByte2HexStr(id), 16);
	}

	/**
	 * 获取照片、录音文件ID
	 * @param time	yyyyMMddHHmmss
	 * @return
	 */
	public static byte[] getMediaId(String time){
		if(StringUtil.isNull(time)){
			time = "20000101000000";
		}
		return getId(time);
	}

	/**
	 *
	 * 营运ID根据进入营运状态的时间生成（计价器提供的时间）；录音ID、照片ID根据动作的执行时间生成。
	 *
	 * 项目			年			月			曰			时			分			秒
	 * 时间范围		2000-2064	1-12		1-31		0-23		0-59		0-59
	 * 占用位数		6位			4位			5位			5位			6位			6位
	 * ID号(32位)	Bit26-31	Bit22-25	Bitl7-21	Bitl2-16	Bit6-ll		BitO-5
	 *
	 * @return  UINT32
	 */
	private static byte[] getId(String time){
		byte[] idByte = new byte[4];
		StringBuilder sb = new StringBuilder();
		try {
			Date date = DateUtil.df6.parse(time);
			Calendar cld = Calendar.getInstance();
			cld.setTime(date);

			// 年	 26-31		6位
			int year = cld.get(Calendar.YEAR)-2000;
			String yearBit = StringUtil.getAntitone(Tools.byteTobit(Tools.int2Bytes(year, 1)));
			yearBit = StringUtil.getAntitone(yearBit.substring(0, 6));
			sb.append(yearBit);

			// 月 	1-12月份		22-25		4位
			int month = cld.get(Calendar.MONTH)+1;
			String monthBit = StringUtil.getAntitone(Tools.byteTobit(Tools.int2Bytes(month, 1)));
			monthBit = StringUtil.getAntitone(monthBit.substring(0, 4));
			sb.append(monthBit);

			// 日	1-31日	l7-21	5位
			int day = cld.get(Calendar.DAY_OF_MONTH);
			String dayBit = StringUtil.getAntitone(Tools.byteTobit(Tools.int2Bytes(day, 1)));
			dayBit = StringUtil.getAntitone(dayBit.substring(0, 5));
			sb.append(dayBit);

			// 时	0-23时	l2-16	5位
			int hour = cld.get(Calendar.HOUR_OF_DAY);
			String hourBit = StringUtil.getAntitone(Tools.byteTobit(Tools.int2Bytes(hour, 1)));
			hourBit = StringUtil.getAntitone(hourBit.substring(0, 5));
			sb.append(hourBit);

			// 分	0-59分	6-ll		6位
			int minute = cld.get(Calendar.MINUTE);
			String minuteBit = StringUtil.getAntitone(Tools.byteTobit(Tools.int2Bytes(minute, 1)));
			minuteBit = StringUtil.getAntitone(minuteBit.substring(0, 6));
			sb.append(minuteBit);

			// 秒	0-59秒	O-5			6位
			int second = cld.get(Calendar.SECOND);
			String secondBit = StringUtil.getAntitone(Tools.byteTobit(Tools.int2Bytes(second, 1)));
			secondBit = StringUtil.getAntitone(secondBit.substring(0, 6));
			sb.append(secondBit);

			String	idText = sb.toString();
			for(int i=0;i<idByte.length;i++){
				idByte[i] = Tools.BitToByte(idText.substring(i * 8, (i +1 ) * 8));
			}

		} catch (Exception e) {
			e.printStackTrace();
			AppLog.e(ExceptionUtil.getInfo(e));
		}
		return idByte;
	}
}
